矩阵运算
从物理和数学的直觉上来讲,矩阵运算是为了能够快速进行批量的向量的计算。
m × n m \times n m × n matrix M ,即表示m行,n列的矩阵
举例如下:
A = [ 3.5 0 0 0 0 1 0 0 0 0 0.5 0 2 − 5 2 1 ] B = [ B 11 B 12 B 21 B 22 B 31 B 32 ] u = [ u 1 , u 2 , u 3 ] v = [ 1 2 3 π ] \mathbf {A} = \left[ \begin{array}{c c c c} 3. 5 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0. 5 & 0 \\ 2 & - 5 & \sqrt {2} & 1 \end{array} \right] \mathbf {B} = \left[ \begin{array}{c c} B _ {1 1} & B _ {1 2} \\ B _ {2 1} & B _ {2 2} \\ B _ {3 1} & B _ {3 2} \end{array} \right] \mathbf {u} = \left[ u _ {1}, u _ {2}, u _ {3} \right] \mathbf {v} = \left[ \begin{array}{l} 1 \\ 2 \\ \sqrt {3} \\ \pi \end{array} \right] A = 3.5 0 0 2 0 1 0 − 5 0 0 0.5 2 0 0 0 1 B = B 11 B 21 B 31 B 12 B 22 B 32 u = [ u 1 , u 2 , u 3 ] v = 1 2 3 π
注意特殊的u和v,作为单行/单列的矩阵,即为一个向量。
符号表示上,矩阵下标首数字表示行,次数字表示列
[ A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33 ] = [ ← A 1 , ∗ → ← A 2 , ∗ → ← A 3 , ∗ → ] \left[\begin{array}{c c c}A _ {1 1}&A _ {1 2}&A _ {1 3}\\A _ {2 1}&A _ {2 2}&A _ {2 3}\\A _ {3 1}&A _ {3 2}&A _ {3 3}\end{array}\right] = \left[\begin{array}{c}\leftarrow \mathbf {A} _ {1, *} \rightarrow\\\leftarrow \mathbf {A} _ {2, *} \rightarrow\\\leftarrow \mathbf {A} _ {3, *} \rightarrow\end{array}\right] A 11 A 21 A 31 A 12 A 22 A 32 A 13 A 23 A 33 = ← A 1 , ∗ → ← A 2 , ∗ → ← A 3 , ∗ →
[ A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33 ] = [ ↑ ↑ ↑ A ⋆ , 1 A ⋆ , 2 A ⋆ , 3 ↓ ↓ ↓ ] \left[ \begin{array}{l l l} A _ {1 1} & A _ {1 2} & A _ {1 3} \\ A _ {2 1} & A _ {2 2} & A _ {2 3} \\ A _ {3 1} & A _ {3 2} & A _ {3 3} \end{array} \right] = \left[ \begin{array}{c c c} \uparrow & \uparrow & \uparrow \\ \mathbf {A} _ {\star , 1} & \mathbf {A} _ {\star , 2} & \mathbf {A} _ {\star , 3} \\ \downarrow & \downarrow & \downarrow \end{array} \right] A 11 A 21 A 31 A 12 A 22 A 32 A 13 A 23 A 33 = ↑ A ⋆ , 1 ↓ ↑ A ⋆ , 2 ↓ ↑ A ⋆ , 3 ↓
运算与向量极为相似,设有
A = [ 1 5 − 2 3 ] , B = [ 6 2 5 − 8 ] , C = [ 1 5 − 2 3 ] , D = [ 2 1 − 3 − 6 3 0 ] \mathbf {A} = \left[ \begin{array}{l l} 1 & 5 \\ - 2 & 3 \end{array} \right], \mathbf {B} = \left[ \begin{array}{l l} 6 & 2 \\ 5 & - 8 \end{array} \right], \mathbf {C} = \left[ \begin{array}{l l} 1 & 5 \\ - 2 & 3 \end{array} \right], \mathbf {D} = \left[ \begin{array}{l l l} 2 & 1 & - 3 \\ - 6 & 3 & 0 \end{array} \right] A = [ 1 − 2 5 3 ] , B = [ 6 5 2 − 8 ] , C = [ 1 − 2 5 3 ] , D = [ 2 − 6 1 3 − 3 0 ]
加法
A + B = [ 1 5 − 2 3 ] + [ 6 2 5 − 8 ] = [ 1 + 6 5 + 2 − 2 + 5 3 + ( − 8 ) ] = [ 7 7 3 − 5 ] \mathbf {A} + \mathbf {B} = \left[ \begin{array}{l l} 1 & 5 \\ - 2 & 3 \end{array} \right] + \left[ \begin{array}{l l} 6 & 2 \\ 5 & - 8 \end{array} \right] = \left[ \begin{array}{l l} 1 + 6 & 5 + 2 \\ - 2 + 5 & 3 + (- 8) \end{array} \right] = \left[ \begin{array}{l l} 7 & 7 \\ 3 & - 5 \end{array} \right] A + B = [ 1 − 2 5 3 ] + [ 6 5 2 − 8 ] = [ 1 + 6 − 2 + 5 5 + 2 3 + ( − 8 ) ] = [ 7 3 7 − 5 ]
常数乘法
D = 3 [ 2 1 − 3 − 6 3 0 ] = [ 3 ( 2 ) 3 ( 1 ) 3 ( − 3 ) 3 ( − 6 ) 3 ( 3 ) 3 ( 0 ) ] = [ 6 3 − 9 − 18 9 0 ] \mathbf { D } = 3 { \left[ \begin{array} { l l l } { 2 } & { 1 } & { - 3 } \\ { - 6 } & { 3 } & { 0 } \end{array} \right] } = { \left[ \begin{array} { l l l } { 3 { \left( 2 \right) } } & { 3 { \left( 1 \right) } } & { 3 { \left( - 3 \right) } } \\ { 3 { \left( - 6 \right) } } & { 3 { \left( 3 \right) } } & { 3 { \left( 0 \right) } } \end{array} \right] } = { \left[ \begin{array} { l l l } { 6 } & { 3 } & { - 9 } \\ { - 1 8 } & { 9 } & { 0 } \end{array} \right] } D = 3 [ 2 − 6 1 3 − 3 0 ] = [ 3 ( 2 ) 3 ( − 6 ) 3 ( 1 ) 3 ( 3 ) 3 ( − 3 ) 3 ( 0 ) ] = [ 6 − 18 3 9 − 9 0 ]
减法
A − B = [ 1 5 − 2 3 ] − [ 6 2 5 − 8 ] = [ 1 − 6 5 − 2 − 2 − 5 3 − ( − 8 ) ] = [ − 5 3 − 7 11 ] \mathbf { A } - \mathbf { B } = { \left[ \begin{array} { l l } { 1 } & { 5 } \\ { - 2 } & { 3 } \end{array} \right] } - { \left[ \begin{array} { l l } { 6 } & { 2 } \\ { 5 } & { - 8 } \end{array} \right] } = { \left[ \begin{array} { l l } { 1 - 6 } & { 5 - 2 } \\ { - 2 - 5 } & { 3 - \left( - 8 \right) } \end{array} \right] } = { \left[ \begin{array} { l l } { - 5 } & { 3 } \\ { - 7 } & { 1 1 } \end{array} \right] } A − B = [ 1 − 2 5 3 ] − [ 6 5 2 − 8 ] = [ 1 − 6 − 2 − 5 5 − 2 3 − ( − 8 ) ] = [ − 5 − 7 3 11 ]
同样具有数学性质:
A + B = B + A \mathbf { A } + \mathbf { B } = \mathbf { B } + \mathbf { A } A + B = B + A
( A + B ) + C = A + ( B + C ) ( \mathbf { A } + \mathbf { B } ) + \mathbf { C } = \mathbf { A } + ( \mathbf { B } + \mathbf { C } ) ( A + B ) + C = A + ( B + C )
r ( A + B ) = r A + r B r ( \mathbf { A } + \mathbf { B } ) = r \mathbf { A } + r \mathbf { B } r ( A + B ) = r A + r B
( r + s ) A = r A + s A ( r + s ) \mathbf { A } = r \mathbf { A } + s \mathbf { A } ( r + s ) A = r A + s A
( A B ) C = A ( B C ) (\mathbf {A B}) \mathbf {C} = \mathbf {A} (\mathbf {B C}) ( AB ) C = A ( BC )
矩阵乘法
设A 为 m × n m \times n m × n 的矩阵,B 为 n × p n \times p n × p 的矩阵,则A ⋅ B {A} \cdot {B} A ⋅ B 结果为一个m × p m \times p m × p 的矩阵,其中
C i j = A i , ∗ ⋅ B ∗ , j (eq.2.1) C _ {i j} = \mathbf {A} _ {i, *} \cdot \mathbf {B} _ {* , j} \tag {eq.2.1} C ij = A i , ∗ ⋅ B ∗ , j ( eq.2.1 )
特殊的:
当左边的矩阵行为1,如:
u A = [ x , y , z ] [ A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33 ] = [ x , y , z ] [ ↑ ↑ ↑ A ⋆ , 1 A ⋆ , 2 A ⋆ , 3 ↓ ↓ ↓ ] \mathbf {u} \mathbf {A} = \left[ x, y, z \right] \left[ \begin{array}{l l l} A _ {1 1} & A _ {1 2} & A _ {1 3} \\ A _ {2 1} & A _ {2 2} & A _ {2 3} \\ A _ {3 1} & A _ {3 2} & A _ {3 3} \end{array} \right] = \left[ x, y, z \right] \left[ \begin{array}{l l l} \uparrow & \uparrow & \uparrow \\ \mathbf {A} _ {\star , 1} & \mathbf {A} _ {\star , 2} & \mathbf {A} _ {\star , 3} \\ \downarrow & \downarrow & \downarrow \end{array} \right] uA = [ x , y , z ] A 11 A 21 A 31 A 12 A 22 A 32 A 13 A 23 A 33 = [ x , y , z ] ↑ A ⋆ , 1 ↓ ↑ A ⋆ , 2 ↓ ↑ A ⋆ , 3 ↓
则有公式推导简化:
u A = [ u ⋅ A ∗ , 1 u ⋅ A ∗ , 2 u ⋅ A ∗ , 3 ] = [ x A 11 + y A 21 + z A 31 , x A 12 + y A 22 + z A 32 , x A 13 + y A 23 + z A 33 ] = [ x A 11 , x A 12 , x A 13 ] + [ y A 21 , y A 22 , y A 23 ] + [ z A 31 , z A 32 , z A 33 ] = x [ A 11 , A 12 , A 13 ] + y [ A 21 , A 22 , A 23 ] + z [ A 31 , A 32 , A 33 ] = x A 1 , ∗ + y A 2 , ∗ + z A 3 , ∗ \begin{array}{l} \mathbf {u} \mathbf {A} = \left[ \begin{array}{l l l} \mathbf {u} \cdot \mathbf {A} _ {*, 1} & \mathbf {u} \cdot \mathbf {A} _ {*, 2} & \mathbf {u} \cdot \mathbf {A} _ {*, 3} \end{array} \right] \\ = \left[ x A _ {1 1} + y A _ {2 1} + z A _ {3 1}, \quad x A _ {1 2} + y A _ {2 2} + z A _ {3 2}, \quad x A _ {1 3} + y A _ {2 3} + z A _ {3 3} \right] \\ = \left[ x A _ {1 1}, x A _ {1 2}, x A _ {1 3} \right] + \left[ y A _ {2 1}, y A _ {2 2}, y A _ {2 3} \right] + \left[ z A _ {3 1}, z A _ {3 2}, z A _ {3 3} \right] \\ = x \left[ A _ {1 1}, A _ {1 2}, A _ {1 3} \right] + y \left[ A _ {2 1}, A _ {2 2}, A _ {2 3} \right] + z \left[ A _ {3 1}, A _ {3 2}, A _ {3 3} \right] \\ = x \mathbf {A} _ {1, *} + y \mathbf {A} _ {2, *} + z \mathbf {A} _ {3, *} \\ \end{array} uA = [ u ⋅ A ∗ , 1 u ⋅ A ∗ , 2 u ⋅ A ∗ , 3 ] = [ x A 11 + y A 21 + z A 31 , x A 12 + y A 22 + z A 32 , x A 13 + y A 23 + z A 33 ] = [ x A 11 , x A 12 , x A 13 ] + [ y A 21 , y A 22 , y A 23 ] + [ z A 31 , z A 32 , z A 33 ] = x [ A 11 , A 12 , A 13 ] + y [ A 21 , A 22 , A 23 ] + z [ A 31 , A 32 , A 33 ] = x A 1 , ∗ + y A 2 , ∗ + z A 3 , ∗
即:
u A = x A 1 , ∗ + y A 2 , ∗ + z A 3 , ∗ (eq.2.2) \mathbf {u} \mathbf {A} = x \mathbf {A} _ {1, *} + y \mathbf {A} _ {2, *} + z \mathbf {A} _ {3, *} \tag {eq.2.2} uA = x A 1 , ∗ + y A 2 , ∗ + z A 3 , ∗ ( eq.2.2 )
泛化为:
[ u 1 , … , u n ] [ A 11 … A 1 m ⋮ ⋱ ⋮ A n 1 … A n m ] = u 1 A 1 , ∗ + ⋯ + u n A n , ∗ (eq.2.3) \left[ u _ {1}, \dots , u _ {n} \right] \left[ \begin{array}{c c c} A _ {1 1} & \dots & A _ {1 m} \\ \vdots & \ddots & \vdots \\ A _ {n 1} & \dots & A _ {n m} \end{array} \right] = u _ {1} \mathbf {A} _ {1, *} + \dots + u _ {n} \mathbf {A} _ {n, *} \tag {eq.2.3} [ u 1 , … , u n ] A 11 ⋮ A n 1 … ⋱ … A 1 m ⋮ A nm = u 1 A 1 , ∗ + ⋯ + u n A n , ∗ ( eq.2.3 )
矩阵转置
符号上,我们将M T { \bf M } ^ { T } M T ,称作矩阵M { \bf M } M 的转置。
具体表示如下:
A = [ 2 − 1 8 3 6 − 4 ] , B = [ a b c d e f g h i ] , C = [ 1 2 3 4 ] \mathbf {A} = \left[ \begin{array}{c c c} 2 & - 1 & 8 \\ 3 & 6 & - 4 \end{array} \right], \mathbf {B} = \left[ \begin{array}{c c c} a & b & c \\ d & e & f \\ g & h & i \end{array} \right], \mathbf {C} = \left[ \begin{array}{c} 1 \\ 2 \\ 3 \\ 4 \end{array} \right] A = [ 2 3 − 1 6 8 − 4 ] , B = a d g b e h c f i , C = 1 2 3 4
A T = [ 2 3 − 1 6 8 − 4 ] , B T = [ a d g b e h c f i ] , C T = [ 1 2 3 4 ] \mathbf {A} ^ {T} = \left[ \begin{array}{l l} 2 & 3 \\ - 1 & 6 \\ 8 & - 4 \end{array} \right], \mathbf {B} ^ {T} = \left[ \begin{array}{l l l} a & d & g \\ b & e & h \\ c & f & i \end{array} \right], \mathbf {C} ^ {T} = \left[ \begin{array}{l l l l} 1 & 2 & 3 & 4 \end{array} \right] A T = 2 − 1 8 3 6 − 4 , B T = a b c d e f g h i , C T = [ 1 2 3 4 ]
以下是常用的转置特性:
( A + B ) T = A T + B T ( \mathbf { A } + \mathbf { B } ) ^ { T } = \mathbf { A } ^ { T } + \mathbf { B } ^ { T } ( A + B ) T = A T + B T
( c A ) T = c A T ( c \mathbf { A } ) ^ { T } = c \mathbf { A } ^ { T } ( c A ) T = c A T
( A B ) T = B T A T ( \mathbf { A } \mathbf { B } ) ^ { T } = \mathbf { B } ^ { T } \mathbf { A } ^ { T } ( AB ) T = B T A T
( A T ) T = A ( \mathbf { A } ^ { T } ) ^ { T } = \mathbf { A } ( A T ) T = A
( A − 1 ) T = ( A T ) − 1 ( \mathbf { A } ^ { - 1 } ) ^ { T } = ( \mathbf { A } ^ { T } ) ^ { - 1 } ( A − 1 ) T = ( A T ) − 1
单位矩阵
对于主对角线上全为1,其余为0的矩阵,我们称作单位矩阵,如下:
[ 1 0 0 1 ] , [ 1 0 0 0 1 0 0 0 1 ] , [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] \left[ \begin{array}{c c} 1 & 0 \\ 0 & 1 \end{array} \right], \left[ \begin{array}{c c c} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right], \left[ \begin{array}{c c c c} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array} \right] [ 1 0 0 1 ] , 1 0 0 0 1 0 0 0 1 , 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
对于任意m × n m \times n m × n 的矩阵A A A ,以及n × p n \times p n × p 的矩阵B B B ,对于n × n n \times n n × n 的单位I I I 矩阵,特性如下
A I = A , I B = B \ {A I} = \ {A} \text { , } \ {I B} = \ {B} A I = A , I B = B
特殊的,当矩阵U U U 为n × n n \times n n × n 时,则有
U I = U , I U = U \ {U I} = \ {U} \text { , } \ {I U} = \ {U} U I = U , I U = U
矩阵子式(Matrix Minors)
定义有:给定n × n n \times n n × n 的矩阵A A A ,A ‾ i j \overline A _ {ij} A ij 表示矩阵A A A 去掉i i i 行,j j j 列后的子矩阵
表示如下:
A = [ A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33 ] A = \left[ \begin{array}{c c c} A _ {11} & A _ {12} & A _ {13} \\ A _ {21} & A _ {22} & A _ {23} \\ A _ {31} & A _ {32} & A _ {33} \end{array} \right] A = A 11 A 21 A 31 A 12 A 22 A 32 A 13 A 23 A 33
A ‾ 11 = [ A 22 A 23 A 32 A 33 ] \overline A _{11} = \left[ \begin{array}{c c} A _ {22} & A _ {23} \\ A _ {32} & A _ {33} \end{array} \right] A 11 = [ A 22 A 32 A 23 A 33 ]
A ‾ 22 = [ A 11 A 13 A 31 A 33 ] \overline A _{22} = \left[ \begin{array}{c c} A _ {11} & A _ {13} \\ A _ {31} & A _ {33} \end{array} \right] A 22 = [ A 11 A 31 A 13 A 33 ]
A ‾ 13 = [ A 21 A 22 A 31 A 32 ] \overline A _{13} = \left[ \begin{array}{c c} A _ {21} & A _ {22} \\ A _ {31} & A _ {32} \end{array} \right] A 13 = [ A 21 A 31 A 22 A 32 ]
矩阵行列式
符号上d e t A det \space A d e t A 表示矩阵A A A 的行列式,有时也写作∣ A ∣ |A| ∣ A ∣ 。
几何意义:它在现实/图形中代表什么?(最核心的一句)
“It can be shown that the determinant has a geometric interpretation related to volumes of boxes and that the determinant provides information on how volumes change under linear transformations.”
实际应用:它能用来干嘛?
“In addition, determinants are used to solve systems of linear equations using Cramer’s Rule”
翻译 :此外,利用克莱姆法则(Cramer’s Rule),行列式还可以用来求解线性方程组。
有计算如下:
二阶矩阵(2 × 2 2 \times 2 2 × 2 )的计算流程
这是最简单的,只需要记住一个口诀:“主对角线乘积” 减去 “副对角线乘积” 。
假设我们有一个 2 × 2 2 \times 2 2 × 2 的方阵 A A A :
A = ( a b c d ) A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} A = ( a c b d )
计算公式:
det A = a d − b c \det A = ad - bc det A = a d − b c
具体例子:
det ( 1 2 3 4 ) = ( 1 × 4 ) − ( 2 × 3 ) = 4 − 6 = − 2 \det \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} = (1 \times 4) - (2 \times 3) = 4 - 6 = -2 det ( 1 3 2 4 ) = ( 1 × 4 ) − ( 2 × 3 ) = 4 − 6 = − 2
2. 三阶矩阵(3 × 3 3 \times 3 3 × 3 )的计算流程
假设我们有一个 3 × 3 3 \times 3 3 × 3 的矩阵:
A = ( a b c d e f g h i ) A = \begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix} A = a d g b e h c f i
计算三阶行列式主要有两种常见方法:
方法一:对角线法则(沙路法则 Sarrus Rule)
这个方法非常直观,但只能用于 3 × 3 3 \times 3 3 × 3 矩阵 。
平移列 :把矩阵的前两列(a , d , g a, d, g a , d , g 和 b , e , h b, e, h b , e , h )原封不动地抄写在矩阵的右边。
主对角线相加 :画出三条从左上到右下的对角线,把线上的三个数字相乘,然后将这三组结果相加。( a e i + b f g + c d h ) (aei + bfg + cdh) ( a e i + b f g + c d h )
副对角线相减 :画出三条从右上到左下的对角线,把线上的三个数字相乘,然后将这三组结果从刚才的总和中减去。( c e g + a f h + b d i ) (ceg + afh + bdi) ( ce g + a f h + b d i )
完整公式:
det A = ( a e i + b f g + c d h ) − ( c e g + a f h + b d i ) \det A = (aei + bfg + cdh) - (ceg + afh + bdi) det A = ( a e i + b f g + c d h ) − ( ce g + a f h + b d i )
方法二:按行/列展开(代数余子式展开)
这个方法的核心是**“降维打击”**:把一个大的 3 × 3 3 \times 3 3 × 3 矩阵拆成三个小的 2 × 2 2 \times 2 2 × 2 矩阵来算。这个思路极其重要,因为所有更高阶的矩阵计算都是基于这个套路。
挑选一行(或一列) :通常为了方便,我们挑第一行,也就是元素 a , b , c a, b, c a , b , c 。
处理第一个元素 a a a :划掉 a a a 所在的行和列,你会发现剩下了四个数字组成的 2 × 2 2 \times 2 2 × 2 小矩阵 ( e f h i ) \begin{pmatrix} e & f \\ h & i \end{pmatrix} ( e h f i ) 。计算这个小矩阵的行列式,然后乘上 a a a 。
处理第二个元素 b b b :同样划掉 b b b 所在的行和列,剩下 ( d f g i ) \begin{pmatrix} d & f \\ g & i \end{pmatrix} ( d g f i ) 。计算它的小行列式乘上 b b b 。注意:展开时符号是正负交替的(+ − + + - + + − + ),所以这里前面要写减号。
处理第三个元素 c c c :划掉 c c c 所在的行和列,剩下 ( d e g h ) \begin{pmatrix} d & e \\ g & h \end{pmatrix} ( d g e h ) 。乘上 c c c ,前面写加号。
完整公式:
det A = a ⋅ det ( e f h i ) − b ⋅ det ( d f g i ) + c ⋅ det ( d e g h ) \det A = a \cdot \det \begin{pmatrix} e & f \\ h & i \end{pmatrix} - b \cdot \det \begin{pmatrix} d & f \\ g & i \end{pmatrix} + c \cdot \det \begin{pmatrix} d & e \\ g & h \end{pmatrix} det A = a ⋅ det ( e h f i ) − b ⋅ det ( d g f i ) + c ⋅ det ( d g e h )
拆解完之后,那三个 2 × 2 2 \times 2 2 × 2 的小矩阵,直接套用第一部分里讲的 ( a d − b c ) (ad - bc) ( a d − b c ) 公式计算就可以了。
3. 更高阶矩阵(4 × 4 4 \times 4 4 × 4 及以上)
如果是 4 × 4 4 \times 4 4 × 4 甚至更大的矩阵,几乎很少有人纯手算,因为计算量会呈指数级增长:
理论上,你可以继续用方法二(展开法) ,把 4 × 4 4 \times 4 4 × 4 拆成四个 3 × 3 3 \times 3 3 × 3 ,再把每个 3 × 3 3 \times 3 3 × 3 拆成 2 × 2 2 \times 2 2 × 2 。
在实际计算机底层运算时(比如图形学引擎或算法库),通常会通过矩阵变换,把它变成一个“上三角矩阵”(对角线左下角全为0的矩阵),然后直接把主对角线上的所有数字乘起来,这就是它的行列式。这样运算效率高得多。
代数余子式(Cofactor), 伴随矩阵(Adjoint of a Matrix)
符号上,我们定义
C i j = ( − 1 ) i + j det ( A i j ) C_{ij} = (-1)^{i+j} \det(A_{ij}) C ij = ( − 1 ) i + j det ( A ij )
我们把算出来的每一个 C i j C_{ij} C ij ,都原封不动地放到它对应的第 i 行第 j 列的位置上,我们就得到了矩阵 A 的代数余子式矩阵 C A C_A C A
再将其转置即得到伴随矩阵 A ∗ A^* A ∗ 。
公式表达为:
A ∗ = ( C A ) T A^* = (C_A)^T A ∗ = ( C A ) T
逆矩阵(Matrix Inverses)
逆矩阵是为了弥补矩阵除法的空缺
符号表示,我们将M − 1 M^{-1} M − 1 称作矩阵 M M M 的逆矩阵。
只有方阵才有逆矩阵
不是所有矩阵都存在逆矩阵,有逆矩阵的叫作可逆矩阵 (Invertible) ,没有逆矩阵的叫作奇异矩阵 (Singular)
如果一个矩阵有逆矩阵,那这个逆矩阵是唯一的,不可能有两个
一个矩阵乘以它的逆矩阵,结果是一个单位矩阵 ,即M M − 1 = M − 1 M = I M M^{-1} = M^{-1} M = I M M − 1 = M − 1 M = I
在实际应用中,设有p p p 是某个物体自身的局部坐标,M M M 是把这个物体摆放到世界地图上的变换过程(比如移动、旋转)。算出来的 p ′ p' p ′ 就是这个物体在世界大地图上的最终绝对坐标(p ′ = p M p' = pM p ′ = pM )
如果这时候有一个技能砸中了世界坐标 p ′ p' p ′ ,服务端想要知道这个技能砸中了该物体局部模型里的哪个位置(求 p p p )?你就可以拿世界坐标 p ′ p' p ′ 乘以 M M M 的逆矩阵(M − 1 M^{-1} M − 1 ),就能瞬间“倒推”回局部坐标!逆矩阵本质上就是一种“时光倒流”的操作。
p ′ M − 1 = p M M − 1 p' M^{-1} = p M M^{-1} p ′ M − 1 = pM M − 1
p ′ M − 1 = p I p' M^{-1} = p I p ′ M − 1 = p I
p ′ M − 1 = p p' M^{-1} = p p ′ M − 1 = p
泛化有:
A − 1 = 1 det A A ∗ A^{-1} = \frac{1}{\det A} A^* A − 1 = d e t A 1 A ∗
为什么有些矩阵没有逆?如果一个矩阵的行列式算出来是 0(det A = 0 \det A = 0 det A = 0 ),在公式里它就变成了分母
2 × 2 2 \times 2 2 × 2 矩阵 求逆
假设有一个矩阵 A = ( a b c d ) A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} A = ( a c b d )
第一步:主对角线换位置 (a a a 和 d d d 互换)。
第二步:副对角线加负号 (b b b 变成 − b -b − b ,c c c 变成 − c -c − c )。
第三步:全员除以行列式 (除以 a d − b c ad - bc a d − b c )。
最后得出的终极公式就是:
A − 1 = 1 a d − b c ( d − b − c a ) A^{-1} = \frac{1}{ad-bc} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix} A − 1 = a d − b c 1 ( d − c − b a )
矩阵运算的顺序极为重要
( A B ) − 1 = B − 1 A − 1 (AB)^{-1} = B^{-1}A^{-1} ( A B ) − 1 = B − 1 A − 1
在游戏逻辑里,如果一个物体先被放大 (Scale) ,再被旋转 (Rotate) ,最后被平移 (Translate) 。当你要反向推导它的初始状态时,就必须严格按照反向平移 → \to → 反向旋转 → \to → 反向缩放 的顺序来做乘法
总结
1. 矩阵基础定义与标量运算
定义 :一个 m × n m \times n m × n 的矩阵是一个包含 m 行、n 列实数的矩形阵列。
相等条件 :两个矩阵维度相同,且对应位置的元素完全一致。
加法 :相同维度的矩阵相加,即对应位置的元素相加。
标量乘法 :一个常数(标量)乘以矩阵,即将该标量与矩阵内的每一个元素分别相乘。
2. 矩阵乘法 (Matrix Multiplication)
维度要求 :矩阵 A (m × n m \times n m × n ) 乘以矩阵 B (n × p n \times p n × p ),结果是一个新矩阵 C (m × p m \times p m × p )。即前者的列数必须等于后者的行数。
计算规则 :结果矩阵 C 中第 i 行、第 j 列的元素 C i j C_{ij} C ij ,等于矩阵 A 的第 i 行向量与矩阵 B 的第 j 列向量的点积 (Dot Product)。
交换律 :不满足 。通常情况下 A B ≠ B A AB \neq BA A B = B A 。
结合律 :满足 。即 ( A B ) C = A ( B C ) (AB)C = A(BC) ( A B ) C = A ( B C ) 。
3. 核心矩阵形态与属性
转置矩阵 (Transpose, 记作 M T M^T M T ) :
单位矩阵 (Identity Matrix, 记作 I I I ) :
必须是方阵。
主对角线上的元素全为 1,其余所有元素全为 0。
行列式 (Determinant, 记作 det A \det A det A ) :
4. 逆矩阵 (Inverse Matrix, 记作 M − 1 M^{-1} M − 1 )
核心性质 :矩阵乘以其逆矩阵等于单位矩阵,即 M M − 1 = M − 1 M = I MM^{-1} = M^{-1}M = I M M − 1 = M − 1 M = I 。
存在性与唯一性 :只有方阵才有逆矩阵(且并非所有方阵都有)。如果存在,逆矩阵是唯一的。
计算公式 :
A − 1 = 1 det A A ∗ A^{-1} = \frac{1}{\det A} A^* A − 1 = d e t A 1 A ∗
_(注:A ∗ A^{*} A ∗ 为伴随矩阵,即代数余子式矩阵的转置)
5. DirectX Math 代码级实现规范
在 3D 游戏引擎底层,为了压榨 CPU 性能,矩阵运算有严格的数据结构规范:
运算类型 (XMMATRIX) :
存储类型 (XMFLOAT4X4) :
类型转换 :
加载到寄存器运算:XMLoadFloat4x4
运算完存回内存:XMStoreFloat4x4
核心 API 函数库 :
XMMATRIX XM_CALLCONV XMMatrixIdentity (); // 生成单位矩阵
XMMATRIX XM_CALLCONV XMMatrixMultiply (FXMMATRIX A, CXMMATRIX B); // 矩阵乘法
XMMATRIX XM_CALLCONV XMMatrixTranspose (FXMMATRIX M); // 求转置
XMVECTOR XM_CALLCONV XMMatrixDeterminant (FXMMATRIX M); // 求行列式
XMMATRIX XM_CALLCONV XMMatrixInverse (XMVECTOR * pDeterminant, FXMMATRIX M); // 求逆矩阵